package cxydmmszl.chapter04.t071;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * <li style="color: red;">Prob</li>
 * 数字字符串转换为字母组合的种数
 * <li style="color: green;">Desc</li>
 * 给定一个字符串 str，str 全部由数字字符组成，如果 str 中的某一个或者相邻两个字符组成的子串值在 1~26 之间，
 * 则这个子串可以转换为一个字母。规定 ‘1’ 转换为 “A” ， “2” 转换为 “B” ...... "26"转化为“Z“。
 * 请求出 str 有多少种不同的转换结果，由于答案可能会比较大，所以请输出对 10^9+7 取模后的答案。
 * <li style="color: green;">Input</li>
 * 输出一行仅有 ’0‘~’9‘ 组成的字符串，代表 str(0<=length(str)<=100000。
 * <li style="color: green;">Output</li>
 * 输出一个整数，代表你所求出的取模后答案。
 * <li style="color: blue;">Link</li> CD46
 *
 * @author habitplus
 * @since 2021-09-13 19:46
 */
public class Main {
    static final int MOD = 1000000007;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        br.close();

        int ans = solve2(s);
        System.out.println(ans);
    }

    private static int solve2(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }

        char[] chs = s.toCharArray();
        int n = chs.length;
        int f1 = 1;
        int f2 = chs[0] > '0' ? 1 : 0;
        int t;
        int num;
        for (int i = 2; i <= n; i++) {
            t = f2;
            num = (chs[i - 2] - '0') * 10 + (chs[i - 1] - '0');
            f2 = (chs[i - 1] > '0' ? f2 : 0) + (9 < num && num < 27 ? f1 : 0);
            f2 %= MOD;
            f1 = t;
        }
        return f2;
    }
}
